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