1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright 2019 Intel Corporation 3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 4*61046927SAndroid Build Coastguard Worker * 5*61046927SAndroid Build Coastguard Worker * File operations helpers 6*61046927SAndroid Build Coastguard Worker */ 7*61046927SAndroid Build Coastguard Worker 8*61046927SAndroid Build Coastguard Worker #ifndef _OS_FILE_H_ 9*61046927SAndroid Build Coastguard Worker #define _OS_FILE_H_ 10*61046927SAndroid Build Coastguard Worker 11*61046927SAndroid Build Coastguard Worker #include <stdbool.h> 12*61046927SAndroid Build Coastguard Worker #include <stdio.h> 13*61046927SAndroid Build Coastguard Worker 14*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 15*61046927SAndroid Build Coastguard Worker extern "C" { 16*61046927SAndroid Build Coastguard Worker #endif 17*61046927SAndroid Build Coastguard Worker 18*61046927SAndroid Build Coastguard Worker /* 19*61046927SAndroid Build Coastguard Worker * Create a new file and opens it for writing-only. 20*61046927SAndroid Build Coastguard Worker * If the given filename already exists, nothing is done and NULL is returned. 21*61046927SAndroid Build Coastguard Worker * `errno` gets set to the failure reason; if that is not EEXIST, the caller 22*61046927SAndroid Build Coastguard Worker * might want to do something other than trying again. 23*61046927SAndroid Build Coastguard Worker */ 24*61046927SAndroid Build Coastguard Worker FILE * 25*61046927SAndroid Build Coastguard Worker os_file_create_unique(const char *filename, int filemode); 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker /* 28*61046927SAndroid Build Coastguard Worker * Duplicate a file descriptor, making sure not to keep it open after an exec*() 29*61046927SAndroid Build Coastguard Worker */ 30*61046927SAndroid Build Coastguard Worker int 31*61046927SAndroid Build Coastguard Worker os_dupfd_cloexec(int fd); 32*61046927SAndroid Build Coastguard Worker 33*61046927SAndroid Build Coastguard Worker /* 34*61046927SAndroid Build Coastguard Worker * Read a file. 35*61046927SAndroid Build Coastguard Worker * Returns a char* that the caller must free(), or NULL and sets errno. 36*61046927SAndroid Build Coastguard Worker * If size is not null and no error occurred it's set to the size of the 37*61046927SAndroid Build Coastguard Worker * file. 38*61046927SAndroid Build Coastguard Worker * Reads files as binary and includes a NUL terminator after the end of the 39*61046927SAndroid Build Coastguard Worker * returned buffer. 40*61046927SAndroid Build Coastguard Worker */ 41*61046927SAndroid Build Coastguard Worker char * 42*61046927SAndroid Build Coastguard Worker os_read_file(const char *filename, size_t *size); 43*61046927SAndroid Build Coastguard Worker 44*61046927SAndroid Build Coastguard Worker /* 45*61046927SAndroid Build Coastguard Worker * Try to determine if two file descriptors reference the same file description 46*61046927SAndroid Build Coastguard Worker * 47*61046927SAndroid Build Coastguard Worker * Return values: 48*61046927SAndroid Build Coastguard Worker * - 0: They reference the same file description 49*61046927SAndroid Build Coastguard Worker * - > 0: They do not reference the same file description 50*61046927SAndroid Build Coastguard Worker * - < 0: Unable to determine whether they reference the same file description 51*61046927SAndroid Build Coastguard Worker */ 52*61046927SAndroid Build Coastguard Worker int 53*61046927SAndroid Build Coastguard Worker os_same_file_description(int fd1, int fd2); 54*61046927SAndroid Build Coastguard Worker 55*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 56*61046927SAndroid Build Coastguard Worker } 57*61046927SAndroid Build Coastguard Worker #endif 58*61046927SAndroid Build Coastguard Worker 59*61046927SAndroid Build Coastguard Worker #endif /* _OS_FILE_H_ */ 60