its-pointless
6 years ago
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