doc: add Meson coding style to contributors guide
[dpdk.git] / lib / librte_eal / unix / eal_file.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2020 Dmitry Kozlyuk
3  */
4
5 #include <sys/file.h>
6 #include <sys/mman.h>
7 #include <fcntl.h>
8 #include <unistd.h>
9
10 #include <rte_errno.h>
11
12 #include "eal_private.h"
13
14 int
15 eal_file_open(const char *path, int flags)
16 {
17         static const int MODE_MASK = EAL_OPEN_READONLY | EAL_OPEN_READWRITE;
18
19         int ret, sys_flags;
20
21         switch (flags & MODE_MASK) {
22         case EAL_OPEN_READONLY:
23                 sys_flags = O_RDONLY;
24                 break;
25         case EAL_OPEN_READWRITE:
26                 sys_flags = O_RDWR;
27                 break;
28         default:
29                 rte_errno = ENOTSUP;
30                 return -1;
31         }
32
33         if (flags & EAL_OPEN_CREATE)
34                 sys_flags |= O_CREAT;
35
36         ret = open(path, sys_flags, 0600);
37         if (ret < 0)
38                 rte_errno = errno;
39
40         return ret;
41 }
42
43 int
44 eal_file_truncate(int fd, ssize_t size)
45 {
46         int ret;
47
48         ret = ftruncate(fd, size);
49         if (ret)
50                 rte_errno = errno;
51
52         return ret;
53 }
54
55 int
56 eal_file_lock(int fd, enum eal_flock_op op, enum eal_flock_mode mode)
57 {
58         int sys_flags = 0;
59         int ret;
60
61         if (mode == EAL_FLOCK_RETURN)
62                 sys_flags |= LOCK_NB;
63
64         switch (op) {
65         case EAL_FLOCK_EXCLUSIVE:
66                 sys_flags |= LOCK_EX;
67                 break;
68         case EAL_FLOCK_SHARED:
69                 sys_flags |= LOCK_SH;
70                 break;
71         case EAL_FLOCK_UNLOCK:
72                 sys_flags |= LOCK_UN;
73                 break;
74         }
75
76         ret = flock(fd, sys_flags);
77         if (ret)
78                 rte_errno = errno;
79
80         return ret;
81 }