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