1570af302Sopenharmony_ci#include <unistd.h> 2570af302Sopenharmony_ci#include <fcntl.h> 3570af302Sopenharmony_ci#include <errno.h> 4570af302Sopenharmony_ci#include <unsupported_api.h> 5570af302Sopenharmony_ci 6570af302Sopenharmony_ciint lockf(int fd, int op, off_t size) 7570af302Sopenharmony_ci{ 8570af302Sopenharmony_ci struct flock l = { 9570af302Sopenharmony_ci .l_type = F_WRLCK, 10570af302Sopenharmony_ci .l_whence = SEEK_CUR, 11570af302Sopenharmony_ci .l_len = size, 12570af302Sopenharmony_ci }; 13570af302Sopenharmony_ci 14570af302Sopenharmony_ci UNSUPPORTED_API_VOID(LITEOS_A); 15570af302Sopenharmony_ci switch (op) { 16570af302Sopenharmony_ci case F_TEST: 17570af302Sopenharmony_ci l.l_type = F_RDLCK; 18570af302Sopenharmony_ci if (fcntl(fd, F_GETLK, &l) < 0) 19570af302Sopenharmony_ci return -1; 20570af302Sopenharmony_ci if (l.l_type == F_UNLCK || l.l_pid == getpid()) 21570af302Sopenharmony_ci return 0; 22570af302Sopenharmony_ci errno = EACCES; 23570af302Sopenharmony_ci return -1; 24570af302Sopenharmony_ci case F_ULOCK: 25570af302Sopenharmony_ci l.l_type = F_UNLCK; 26570af302Sopenharmony_ci case F_TLOCK: 27570af302Sopenharmony_ci return fcntl(fd, F_SETLK, &l); 28570af302Sopenharmony_ci case F_LOCK: 29570af302Sopenharmony_ci return fcntl(fd, F_SETLKW, &l); 30570af302Sopenharmony_ci } 31570af302Sopenharmony_ci errno = EINVAL; 32570af302Sopenharmony_ci return -1; 33570af302Sopenharmony_ci} 34570af302Sopenharmony_ci 35570af302Sopenharmony_ciweak_alias(lockf, lockf64); 36