committed by
Fredrik Fornwall
3 changed files with 43 additions and 2 deletions
@ -0,0 +1,11 @@ |
|||
--- ../cache/newsboat-2.12/src/fslock.cpp 2018-06-24 19:30:30.000000000 +0000
|
|||
+++ ./src/fslock.cpp 2018-07-12 01:05:07.850121184 +0000
|
|||
@@ -4,7 +4,7 @@
|
|||
#include <string.h> |
|||
#include <sys/stat.h> |
|||
#include <unistd.h> |
|||
-
|
|||
+#include "lockf.c"
|
|||
#include "logger.h" |
|||
|
|||
namespace newsboat { |
@ -0,0 +1,31 @@ |
|||
#include <unistd.h> |
|||
#include <fcntl.h> |
|||
#include <errno.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; |
|||
} |
|||
|
Loading…
Reference in new issue