diff options
author | rsc <devnull@localhost> | 2005-01-04 22:18:40 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-01-04 22:18:40 +0000 |
commit | f84eebeb8147a4527cea0ed4839c7c8becfaf8df (patch) | |
tree | 292efe191150d8d4fb0cd3b6cf97b62363454faa /src/lib9 | |
parent | b4223cd6f27153b6c27a88cae3955274416d8749 (diff) | |
download | plan9port-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.c | 9 |
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; } |