repo.or.cz
/
musl.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
blame
|
history
|
raw
|
HEAD
powerpc-sf longjmp clobbering of val argument
[musl.git]
/
src
/
misc
/
lockf.c
blob
0162442b0ba6b0908588bf8788323cefb3a72b73
1
#include <unistd.h>
2
#include <fcntl.h>
3
#include <errno.h>
4
5
int
lockf
(
int
fd
,
int
op
,
off_t size
)
6
{
7
struct
flock l
= {
8
.
l_type
=
F_WRLCK
,
9
.
l_whence
=
SEEK_CUR
,
10
.
l_len
=
size
,
11
};
12
switch
(
op
) {
13
case
F_TEST
:
14
l
.
l_type
=
F_RDLCK
;
15
if
(
fcntl
(
fd
,
F_GETLK
, &
l
) <
0
)
16
return
-
1
;
17
if
(
l
.
l_type
==
F_UNLCK
||
l
.
l_pid
==
getpid
())
18
return
0
;
19
errno
=
EACCES
;
20
return
-
1
;
21
case
F_ULOCK
:
22
l
.
l_type
=
F_UNLCK
;
23
case
F_TLOCK
:
24
return
fcntl
(
fd
,
F_SETLK
, &
l
);
25
case
F_LOCK
:
26
return
fcntl
(
fd
,
F_SETLKW
, &
l
);
27
}
28
errno
=
EINVAL
;
29
return
-
1
;
30
}