aboutsummaryrefslogtreecommitdiff
path: root/src/lib9
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-01-04 22:18:40 +0000
committerrsc <devnull@localhost>2005-01-04 22:18:40 +0000
commitf84eebeb8147a4527cea0ed4839c7c8becfaf8df (patch)
tree292efe191150d8d4fb0cd3b6cf97b62363454faa /src/lib9
parentb4223cd6f27153b6c27a88cae3955274416d8749 (diff)
downloadplan9port-f84eebeb8147a4527cea0ed4839c7c8becfaf8df.tar.gz
plan9port-f84eebeb8147a4527cea0ed4839c7c8becfaf8df.tar.bz2
plan9port-f84eebeb8147a4527cea0ed4839c7c8becfaf8df.zip
use fcntl F_SETLK instead of flock, for sun's.
Diffstat (limited to 'src/lib9')
-rw-r--r--src/lib9/create.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lib9/create.c b/src/lib9/create.c
index af621099..c8f6605a 100644
--- a/src/lib9/create.c
+++ b/src/lib9/create.c
@@ -2,6 +2,8 @@
#include <u.h>
#define NOPLAN9DEFINES
#include <sys/file.h>
+#include <unistd.h>
+#include <fcntl.h>
#include <libc.h>
#include <sys/stat.h>
#ifndef O_DIRECT
@@ -12,6 +14,7 @@ int
p9create(char *path, int mode, ulong perm)
{
int fd, cexec, umode, rclose, lock, rdwr;
+ struct flock fl;
rdwr = mode&3;
lock = mode&OLOCK;
@@ -49,7 +52,11 @@ p9create(char *path, int mode, ulong perm)
out:
if(fd >= 0){
if(lock){
- if(flock(fd, (rdwr==OREAD) ? LOCK_SH : LOCK_EX) < 0){
+ fl.l_type = (rdwr==OREAD) ? F_RDLCK : F_WRLCK;
+ fl.l_whence = SEEK_SET;
+ fl.l_start = 0;
+ fl.l_len = 0;
+ if(fcntl(fd, F_SETLK, &fl) < 0){
close(fd);
return -1;
}