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