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