]> git.proxmox.com Git - mirror_lxc.git/blob - src/lxc/file_utils.h
confile: cleanup parse_line()
[mirror_lxc.git] / src / lxc / file_utils.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2
3 #ifndef __LXC_FILE_UTILS_H
4 #define __LXC_FILE_UTILS_H
5
6 #include <fcntl.h>
7 #include <stdbool.h>
8 #include <stdio.h>
9 #include <sys/stat.h>
10 #include <sys/types.h>
11 #include <sys/uio.h>
12 #include <sys/vfs.h>
13 #include <unistd.h>
14
15 #include "compiler.h"
16
17 /* read and write whole files */
18 __hidden extern int lxc_write_to_file(const char *filename, const void *buf, size_t count,
19 bool add_newline, mode_t mode) __access_r(2, 3);
20
21 __hidden extern int lxc_readat(int dirfd, const char *filename, void *buf, size_t count)
22 __access_w(3, 4);
23
24 __hidden extern int lxc_writeat(int dirfd, const char *filename, const void *buf, size_t count)
25 __access_r(3, 4);
26
27 __hidden extern int lxc_write_openat(const char *dir, const char *filename, const void *buf,
28 size_t count) __access_r(3, 4);
29
30 __hidden extern int lxc_read_from_file(const char *filename, void *buf, size_t count)
31 __access_w(2, 3);
32
33 /* send and receive buffers completely */
34 __hidden extern ssize_t lxc_write_nointr(int fd, const void *buf, size_t count) __access_r(2, 3);
35
36 __hidden extern ssize_t lxc_pwrite_nointr(int fd, const void *buf, size_t count, off_t offset)
37 __access_r(2, 3);
38
39 __hidden extern ssize_t lxc_send_nointr(int sockfd, void *buf, size_t len, int flags)
40 __access_r(2, 3);
41
42 __hidden extern ssize_t lxc_read_nointr(int fd, void *buf, size_t count) __access_w(2, 3);
43
44 __hidden extern ssize_t lxc_read_nointr_expect(int fd, void *buf, size_t count,
45 const void *expected_buf) __access_w(2, 3);
46
47 __hidden extern ssize_t lxc_read_file_expect(const char *path, void *buf, size_t count,
48 const void *expected_buf) __access_w(2, 3);
49
50 __hidden extern ssize_t lxc_recv_nointr(int sockfd, void *buf, size_t len, int flags)
51 __access_w(2, 3);
52
53 __hidden extern ssize_t lxc_recvmsg_nointr_iov(int sockfd, struct iovec *iov, size_t iovlen,
54 int flags);
55
56 __hidden extern bool file_exists(const char *f);
57 __hidden extern int print_to_file(const char *file, const char *content);
58 __hidden extern int is_dir(const char *path);
59 __hidden extern int lxc_count_file_lines(const char *fn);
60 __hidden extern int lxc_make_tmpfile(char *template, bool rm);
61
62 /* __typeof__ should be safe to use with all compilers. */
63 typedef __typeof__(((struct statfs *)NULL)->f_type) fs_type_magic;
64 __hidden extern bool has_fs_type(const char *path, fs_type_magic magic_val);
65 __hidden extern bool fhas_fs_type(int fd, fs_type_magic magic_val);
66 __hidden extern bool is_fs_type(const struct statfs *fs, fs_type_magic magic_val);
67 __hidden extern FILE *fopen_cloexec(const char *path, const char *mode);
68 __hidden extern ssize_t lxc_sendfile_nointr(int out_fd, int in_fd, off_t *offset, size_t count);
69 __hidden extern char *file_to_buf(const char *path, size_t *length);
70 __hidden extern int fd_to_buf(int fd, char **buf, size_t *length);
71 __hidden extern ssize_t __fd_to_fd(int from, int to);
72 static inline int fd_to_fd(int from, int to)
73 {
74 return __fd_to_fd(from, to) >= 0;
75 }
76 __hidden extern int lxc_open_dirfd(const char *dir);
77 __hidden extern FILE *fdopen_cached(int fd, const char *mode, void **caller_freed_buffer);
78 __hidden extern FILE *fopen_cached(const char *path, const char *mode, void **caller_freed_buffer);
79 __hidden extern int timens_offset_write(clockid_t clk_id, int64_t s_offset, int64_t ns_offset);
80 __hidden extern bool exists_dir_at(int dir_fd, const char *path);
81 __hidden extern bool exists_file_at(int dir_fd, const char *path);
82 __hidden extern int open_beneath(int dir_fd, const char *path, unsigned int flags);
83 __hidden int fd_make_nonblocking(int fd);
84
85 #endif /* __LXC_FILE_UTILS_H */