initial check-in, version 0.5.0
This commit is contained in:
commit
0b44a0315b
1021 changed files with 45711 additions and 0 deletions
33
src/misc/lockf.c
Normal file
33
src/misc/lockf.c
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include "libc.h"
|
||||
|
||||
int lockf(int fd, int op, off_t size)
|
||||
{
|
||||
struct flock l = {
|
||||
.l_type = F_WRLCK,
|
||||
.l_whence = SEEK_CUR,
|
||||
.l_len = size,
|
||||
};
|
||||
switch (op) {
|
||||
case F_TEST:
|
||||
l.l_type = F_RDLCK;
|
||||
if (fcntl(fd, F_GETLK, &l) < 0)
|
||||
return -1;
|
||||
if (l.l_type == F_UNLCK || l.l_pid == getpid())
|
||||
return 0;
|
||||
errno = EACCES;
|
||||
return -1;
|
||||
case F_ULOCK:
|
||||
l.l_type = F_UNLCK;
|
||||
case F_TLOCK:
|
||||
return fcntl(fd, F_SETLK, &l);
|
||||
case F_LOCK:
|
||||
return fcntl(fd, F_SETLKW, &l);
|
||||
}
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
LFS64(lockf);
|
||||
Loading…
Add table
Add a link
Reference in a new issue